package cn.iocoder.yudao.module.system.api.tenant;

import cn.iocoder.yudao.module.system.api.tenant.dto.TenantCreateVo;
import cn.iocoder.yudao.module.system.api.tenant.dto.TenantRepVo;
import cn.iocoder.yudao.module.system.api.tenant.dto.TenantUpadateVo;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantUpdateReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Tenant 用户 API 实现类
 *
 * @author 周枫皓
 */
@Service
public class TenantUserApiImpl implements TenantUserApi {


    @Resource
    private TenantService tenantService;


    @Override
    public Long createTenant(TenantCreateVo tenantCreateVo) {
        TenantCreateReqVO createReqVO = new TenantCreateReqVO();
        BeanUtils.copyProperties(tenantCreateVo, createReqVO);
        return tenantService.createTenant(createReqVO);
    }

    @Override
    public Long createTenant(TenantCreateVo tenantCreateVo, AdminUserRespDTO adminUserRespDTO) {
        TenantCreateReqVO createReqVO = new TenantCreateReqVO();
        BeanUtils.copyProperties(tenantCreateVo, createReqVO);
        return tenantService.createTenant(createReqVO,adminUserRespDTO);
    }


    @Override
    public void updateTenant(TenantUpadateVo tenantUpadateVo) {
        TenantUpdateReqVO updateReqVO = new TenantUpdateReqVO();
        BeanUtils.copyProperties(tenantUpadateVo, updateReqVO);
        tenantService.updateTenant(updateReqVO);
    }

    @Override
    public void updateTenantMobile(TenantUpadateVo tenantUpadateVo) {
        TenantUpdateReqVO updateReqVO = new  TenantUpdateReqVO();
        BeanUtils.copyProperties(tenantUpadateVo, updateReqVO);
        tenantService.updateTenantMobile(updateReqVO);
    }

    @Override
    public TenantRepVo getTenant(Long id) {
        TenantDO tenant=tenantService.getTenant(id);
        TenantRepVo tenantRepVo = new TenantRepVo();
        BeanUtils.copyProperties(tenant, tenantRepVo);
        return tenantRepVo;
    }

    @Override
    public TenantRepVo getTenantByMobile(String mobile) {
        TenantDO tenantDO=tenantService.getTenantByMobile(mobile);
        TenantRepVo tenantRepVo = new TenantRepVo();
        BeanUtils.copyProperties(tenantDO, tenantRepVo);
        return tenantRepVo;
    }

    @Override
    public void deleteTenant(Long userId) {
        TenantDO tenantDO=tenantService.getTenantByUserId(userId);
        tenantService.deleteTenant(tenantDO.getId());
    }
    @Override
    public void initLocalCache(){
        tenantService.initLocalCache();
    }
}
